ديف أوبس

مقدمة شاملة في سكربتات الصدفة

مدخل إلى كتابة سكربتات الصدفة (Shell Scripting)، لينكس، سطر الأوامر، البرمجة النصية، Bash

تُعد سكربتات الصدفة (Shell Scripts) أحد الأعمدة الأساسية لإدارة أنظمة التشغيل المستندة إلى يونكس/لينكس. إنها أدوات قوية تسمح للمستخدمين بتنفيذ أوتوماتيكي لمهام مكررة، تحليل البيانات، إدارة النظام، وتخصيص بيئة العمل. كتابة سكربتات الصدفة ليست فقط مهارة مفيدة، بل ضرورية لأي شخص يتعامل مع بيئة لينكس أو يرغب في اكتساب تحكم كامل في النظام باستخدام سطر الأوامر.


تعريف سكربت الصدفة

سكربت الصدفة هو ملف نصي يحتوي على سلسلة من أوامر سطر الأوامر التي تُنفذ بواسطة مفسر الصدفة (مثل Bash). يتم استخدامه لأتمتة المهام المتكررة أو المعقدة، ويمنح القدرة على الجمع بين أوامر متعددة مع المنطق الشرطي، التكرار، ومعالجة الإدخال والإخراج.


أنواع الصدفات (Shells)

يوجد عدد من أنواع الصدفات في أنظمة يونكس/لينكس، كل منها يملك مفسره الخاص:

اسم الصدفة الوصف
Bash الأكثر شيوعاً في توزيعات لينكس الحديثة
sh الصدفة القياسية التقليدية
zsh مطورة من Bash مع ميزات إضافية
csh مستوحاة من لغة C
ksh KornShell، مع دعم جيد للبرمجة النصية

التركيز الأساسي في هذا المقال سيكون على Bash، نظرًا لانتشاره الكبير وسهولة تعلمه.


لماذا استخدام سكربتات الصدفة؟

  • أتمتة المهام المتكررة: مثل نسخ الملفات، أرشفتها، إرسال بريد إلكتروني، تحديث الأنظمة.

  • تحسين الإنتاجية: تنفيذ مئات الأوامر بضغطة واحدة.

  • إدارة النظام: مراقبة العمليات، إدارة المستخدمين، جدولة المهام.

  • قوة التخصيص: إنشاء بيئة عمل مخصصة وسيناريوهات تشغيل مرنة.

  • التكامل مع أدوات أخرى: يمكن دمجها مع أدوات مثل awk، sed، grep وغيرها من الأدوات النصية.


البنية الأساسية لسكربت الصدفة

كل سكربت يبدأ بتحديد المفسر (Shebang):

bash
#!/bin/bash

هذا السطر يخبر النظام أن هذا السكربت يجب أن يُنفذ باستخدام مفسر Bash.

مثال بسيط على سكربت:

bash
#!/bin/bash echo "مرحباً بك في عالم سكربتات الصدفة"

لحفظه وتنفيذه:

bash
chmod +x script.sh ./script.sh

المتغيرات

يمكنك تعريف متغيرات بسهولة في سكربت الصدفة:

bash
#!/bin/bash الاسم="أحمد" echo "مرحباً، $الاسم"
  • لا تضع مسافات حول =.

  • استخدم $ لاستدعاء القيمة.


المعاملات (Arguments)

يستطيع السكربت استقبال مدخلات عند التشغيل:

bash
#!/bin/bash echo "أول معامل هو: $1"

$0 يشير إلى اسم السكربت، $1 إلى أول معامل، $2 إلى الثاني، وهكذا.

للتعامل مع عدد غير محدد من المعاملات:

bash
#!/bin/bash for arg in "$@" do echo "المعامل: $arg" done

الشروط (If statements)

التحكم في التدفق باستخدام الشروط:

bash
#!/bin/bash if [ $1 -gt 10 ] then echo "أكبر من 10" else echo "10 أو أقل" fi
  • استخدم [ ] مع فراغات.

  • -gt تعني “أكبر من”، -lt “أقل من”، -eq “يساوي”.


التكرار (Loops)

حلقة for

bash
for i in 1 2 3 4 5 do echo "الرقم: $i" done

حلقة while

bash
count=1 while [ $count -le 5 ] do echo "العدد: $count" ((count++)) done

الدوال (Functions)

bash
#!/bin/bash مرحباً () { echo "أهلاً، $1" } مرحباً "ليلى"
  • يمكن استخدام دوال لإعادة استخدام الشيفرة.

  • المتغير $1 داخل الدالة يشير إلى أول معامل مرر للدالة.


القراءة من المستخدم

bash
#!/bin/bash read -p "ما اسمك؟ " الاسم echo "أهلاً بك يا $الاسم"

read تُستخدم لأخذ الإدخال من المستخدم.


التعامل مع الملفات

القراءة من ملف:

bash
#!/bin/bash while read سطر do echo "قرأت: $سطر" done < الملف.txt

الكتابة إلى ملف:

bash
echo "هذا محتوى جديد" >> الملف.txt

التحقق من وجود ملف:

bash
if [ -f "بيانات.txt" ]; then echo "الملف موجود" else echo "الملف غير موجود" fi

إدارة الأخطاء والخروج

  • الكود exit يحدد حالة الخروج من السكربت:

bash
if [ ! -f "config.cfg" ]; then echo "الملف غير موجود" exit 1 fi
  • 0 يعني نجاح، وأي رقم آخر يعني فشل.


تنفيذ أوامر خارجية

يمكن تنفيذ أوامر النظام داخل السكربت:

bash
التاريخ=$(date) echo "الوقت الحالي: $التاريخ"
  • يتم استخدام الأقواس $() للحصول على مخرجات الأوامر.


معالجة النصوص باستخدام أدوات خارجية

باستخدام grep

bash
grep "كلمة" الملف.txt

باستخدام awk

bash
awk '{print $1}' الملف.txt

باستخدام sed

bash
sed 's/قديم/جديد/g' الملف.txt

السكربتات التفاعلية

يمكن جعل السكربت يتفاعل مع المستخدم أو البيئة:

bash
#!/bin/bash read -p "هل ترغب في المتابعة؟ (y/n): " الخيار if [[ "$الخيار" == "y" ]]; then echo "جاري المتابعة..." else echo "تم الإلغاء." fi

سكربتات الصدفة المجدولة (crontab)

تُستخدم لتنفيذ السكربتات في مواعيد مجدولة.

عرض المهام المجدولة:

bash
crontab -l

إضافة مهمة:

bash
crontab -e

مثال على تنفيذ سكربت كل يوم في الساعة 7 مساءً:

arduino
0 19 * * * /home/user/script.sh

أفضل الممارسات

  • التعليق على الكود لتوضيح الغرض من كل جزء.

  • التحقق من صلاحيات الملفات.

  • التعامل مع الأخطاء بعناية.

  • استخدام متغيرات واضحة الأسماء.

  • تجنب استدعاء أوامر خطيرة بدون تحقق.


أدوات المساعدة في كتابة سكربتات الصدفة

  • ShellCheck: أداة لتحليل السكربتات واكتشاف الأخطاء.

  • set -x / set -e:

    • set -x: لطباعة كل أمر قبل تنفيذه (لأغراض التصحيح).

    • set -e: لإيقاف السكربت عند أول خطأ.


مثال تطبيقي: سكربت نسخ احتياطي تلقائي

bash
#!/bin/bash الوجهة="/backup" المصدر="/home/user/documents" التاريخ=$(date +%F) الملف="backup-$التاريخ.tar.gz" tar -czf "$الوجهة/$ملف" "$المصدر" echo "تم إنشاء النسخة الاحتياطية في $الوجهة/$الملف"

هذا السكربت يقوم بضغط مجلد المستندات إلى ملف أرشيف يومي.


الجدول التالي يلخص بعض الأوامر المهمة:

الأمر الوظيفة
echo طباعة نص
read قراءة مدخل من المستخدم
if, else تنفيذ الشروط
for, while تنفيذ التكرار
chmod تغيير صلاحيات الملف
./script.sh تنفيذ السكربت
crontab جدولة تنفيذ السكربتات
grep البحث في النصوص
awk تحليل النصوص المعتمدة على الأعمدة
sed التعديل على النصوص

الخلاصة

كتابة سكربتات الصدفة تعتبر مهارة محورية لأي مستخدم لأنظمة لينكس، سواء أكان مدير نظام، مطوراً، أو مستخدماً عادياً. القدرة على التحكم التام في المهام وتخصيص بيئة العمل من خلال السكربتات تعني كفاءة أعلى وتحكماً أعمق. من خلال تعلم الأساسيات والتدرج في بناء السكربتات الأكثر تعقيداً، يمكن تحويل أي بيئة عمل إلى منظومة مرنة وقابلة للتطوير باستخدام أدوات مجانية وبسيطة.


المراجع: